package com.hcs.comm;


import com.hcs.comm.api.HttpEnum;
import com.hcs.entity.Category;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.List;

/**
 * @author hcs
 * @version 1.0.0
 * @ClassName R.java
 * @Description 统一结果封装类
 * @createTime 2023年10月17日 11:22:00
 */
@Data
@Schema(name = "统一结果封装类", description = "统一结果封装类")
public class R<T> {
    //描述统一格式的数据
    @Schema(description = "描述统一格式的数据")
    private T data;
    //描述统一格式中的编码，用于区分操作，可以简化配置0或1表示成功失败
    @Schema(description = "描述统一格式中的编码")
    private Integer code;
    //描述统一格式中的消息，可选属性
    @Schema(description = "描述统一格式中的消息")
    private String message;
    //信息状态
    @Schema(description = "信息状态")
    private Boolean status;

    private static <T> R<T> response(Integer code, Boolean status, String message, T data) {
        R<T> R = new R<>();
        R.setCode(code);
        R.setStatus(status);
        R.setMessage(message);
        R.setData(data);
        return R;
    }

    private static <T> R<T> response(Integer code, Boolean status, String message) {
        R<T> R = new R<>();
        R.setCode(code);
        R.setStatus(status);
        R.setMessage(message);
        return R;
    }


    //成功返回，有返回结果
    public static <T> R<T> success(T data) {
        return response(HttpEnum.SUCCESS.getCode(), true, HttpEnum.SUCCESS.getMessage(), data);
    }

    //失败返回
    public static <T> R<T> fail() {
        return response(HttpEnum.ERROR.getCode(), false, HttpEnum.ERROR.getMessage());
    }

    //失败返回
    public static <T> R<T> fail(Integer code, String message) {
        return response(code, false, message);
    }

    /**
     * 未登录返回结果
     */
    public static <T> R<T> unauthorized() {
        return response(HttpEnum.UNAUTHORIZED.getCode(), false, HttpEnum.UNAUTHORIZED.getMessage());
    }

    /**
     * 未授权返回结果
     */
    public static <T> R<T> forbidden() {
        return response(HttpEnum.FORBIDDEN.getCode(), false, HttpEnum.FORBIDDEN.getMessage());
    }

}
